package comun;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.io.File;
import java.io.FileInputStream;
import java.sql.PreparedStatement;


import oracle.jdbc.OracleTypes;

import planet.bean.BeanUnidad;
import planet.bean.BeanUsuario;
import planet.comun.OracleDBConn;

public class UsuarioImp implements Usuario {
	///coneccion bd Oracle////
	private Connection getConnection() {
		OracleDBConn cnx = new OracleDBConn();
		return cnx.getConnection();
	}
	///coneccion bd Oracle////

	public void insertar_Usuario(BeanUsuario entidad) throws Exception {
		System.out.println("LLegoo----oracle");
		 Connection conn = getConnection();
		    CallableStatement cs=null;
		    cs= conn.prepareCall("{call SP_INS_USUARIO(?,?,?,?,?,?,?,?,?,?,?,?)}");
		    try{
		      conn = getConnection();
		      cs.setString(1,entidad.getAPE_USUARIO());
		      cs.setString(2,entidad.getNOM_USUARIO());
		      cs.setString(3,entidad.getTEL_USUARIO());
		      cs.setString(4,entidad.getDNI_USUARIO());
		      cs.setString(5,entidad.getEMAIL_USUARIO());
		      cs.setString(6,entidad.getCOD_TIP_USUARIO());
		      cs.setString(7,entidad.getCOD_UNIDAD());
		      cs.setString(8,entidad.getCOD_EMPLEO());
		      cs.setString(9,entidad.getNOM_JEFE());
		      cs.setString(10,entidad.getCOD_USUARIO());
		      cs.setString(11,entidad.getCLAVE_USUARIO());
		      cs.setString(12,entidad.getEST_USUARIO());
		      cs.executeUpdate ();
		    }catch(SQLException e){
		      System.out.println(e.toString());
		    }finally{
		      cs.close();
		      conn.close();
		    }

		    
		    
		    
	}

	public void actualizar_Usuario(BeanUsuario entidad) throws Exception {
		System.out.println("LLegoo----oracle");
		 Connection conn = getConnection();
		    CallableStatement cs=null;
		    cs= conn.prepareCall("{call SP_UPD_USUARIO(?,?,?,?,?,?,?,?,?,?,?,?)}");
		    try{
		      conn = getConnection();
		      cs.setString(1,entidad.getAPE_USUARIO());
		      cs.setString(2,entidad.getNOM_USUARIO());
		      cs.setString(3,entidad.getTEL_USUARIO());
		      cs.setString(4,entidad.getDNI_USUARIO());
		      cs.setString(5,entidad.getEMAIL_USUARIO());
		      cs.setString(6,entidad.getCOD_TIP_USUARIO());
		      cs.setString(7,entidad.getCOD_UNIDAD());
		      cs.setString(8,entidad.getCOD_EMPLEO());
		      cs.setString(9,entidad.getNOM_JEFE());
		      cs.setString(10,entidad.getCOD_USUARIO());
		      cs.setString(11,entidad.getCLAVE_USUARIO());
		      cs.setString(12,entidad.getEST_USUARIO());
		      cs.executeUpdate ();
		    }catch(SQLException e){
		      System.out.println(e.toString());
		    }finally{
		      cs.close();
		      conn.close();
		    }
	}

	
	public Collection listarUsuario() throws Exception {
		Collection objLista = new ArrayList();
		BeanUsuario bean = null;
	    try {
	      Connection conn = getConnection();
	      boolean useOracleQuery = true;
	      String oracleQuery = "begin ? := SF_GET_USUARIO(?,?,?,?,?); end;";
	      String genericQuery = "{ call ? := SF_GET_USUARIO(?,?,?,?,?) }";
	      String query = useOracleQuery ? oracleQuery : genericQuery;
	      CallableStatement stmt = conn.prepareCall(query);
	      stmt.registerOutParameter(1, OracleTypes.CURSOR);
	      stmt.setString(2,"A");
	      stmt.setString(3," ");
	      stmt.setString(4," ");
	      stmt.setString(5," ");
	      stmt.setString(6," ");
	      stmt.execute();
	      ResultSet rs = (ResultSet)stmt.getObject(1);
	      while (rs.next()) {
	    	  bean = new BeanUsuario();
	    	  bean.setCOD_USUARIO(rs.getString(1));
	    	  bean.setNOM_USUARIO(rs.getString(2));
	    	  bean.setAPE_USUARIO(rs.getString(3));
	    	  bean.setDNI_USUARIO(rs.getString(4));
	    	  bean.setTEL_USUARIO(rs.getString(5));
	    	  bean.setEMAIL_USUARIO(rs.getString(6));
	    	  bean.setEST_USUARIO(rs.getString(7));
	    	  bean.setNOM_JEFE(rs.getString(8));
	    	  bean.setCLAVE_USUARIO(rs.getString(9));
	    	  bean.setCOD_TIP_USUARIO(rs.getString(10));
	    	  bean.setDES_TIP_USUARIO(rs.getString(11));
	    	  bean.setCOD_UNIDAD(rs.getString(12));
	    	  bean.setNOM_UNIDAD(rs.getString(13));
	    	  bean.setCOD_EMPLEO(rs.getString(14));
	    	  bean.setNOM_EMPLEO(rs.getString(15));
	    	  objLista.add(bean);
	      }
	      rs.close();
	      conn.close();
	    }catch (SQLException e) {
	      e.printStackTrace();
	    }
	    return objLista;
	  }
	

	@Override
	public void eliminarUsuario(String sCodigo) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void insertar_Foto(String codigo, String ruta1) throws Exception {
		
		//System.out.println("actualizando fotos dinamicas");
		
		Connection conn = getConnection();
		PreparedStatement pstmt=null;
		//String codigoanex;
		
			try {
				BeanUsuario objBean= new BeanUsuario();
								
					if (ruta1==""){
						//System.out.println("No exiten imagen a insertar en el Oracle para  al tabla anexos 1");
					}
					else{
//						//System.out.println("Archivo del Anexo 1 "+ruta1+"X");
						File archivo1 = new File("C:\\tmp\\" + ruta1);
						archivo1 = new File("C:\\tmp\\" + ruta1);
						FileInputStream streamEntrada1 = new FileInputStream(archivo1);
						objBean.setBIMATIT_FOTO_FRENTE(streamEntrada1);
						pstmt = conn.prepareStatement("UPDATE USUARIO  SET  FOT_USUARIO =?  WHERE COD_USUARIO =?");
						pstmt.setBinaryStream(1,streamEntrada1,streamEntrada1.available());
						pstmt.setString(2,codigo);
						pstmt.executeUpdate();						
											
					}					
					
					
					
					boolean flag;
					if(ruta1!=""){
						File archivo1 = new File("C:\\tmp\\" + ruta1);
						archivo1 = new File("C:\\tmp\\" + ruta1);
						flag=archivo1.delete();
//						//System.out.println("archivo removido: " + flag);
					}
					
				
			} catch (Exception e) {
				//System.out.println("Error DETALLADO"+e.getMessage());
			e.printStackTrace();
		}		
		
	}



	@Override
	public BeanUsuario validarUsuario(String usuario, String clave) throws Exception {
		BeanUsuario objEntidad = null;
		
		Connection conn = getConnection();
		CallableStatement cs=null;
		boolean useOracleQuery = true;
		

		String oracleQuery = "begin ? := SF_GET_LOGIN(?,?); end;";
		String genericQuery = "{ call ? := SF_GET_LOGIN(?,?) }";
		ResultSet rst=null;
		String query = useOracleQuery ? oracleQuery : genericQuery;
			cs = (CallableStatement) conn.prepareCall(query);
			cs.registerOutParameter(1, OracleTypes.CURSOR);
			cs.setString(2,usuario);
			cs.setString(3,clave);
			cs.execute();
			rst = (ResultSet)cs.getObject(1);
			while (rst.next()) {
				objEntidad = new BeanUsuario();
				objEntidad.setCOD_USUARIO(rst.getString(1));
				objEntidad.setCLAVE_USUARIO(rst.getString(2));
				objEntidad.setNOM_USUARIO(rst.getString(3));
			}
			rst.close();
		cs.close();
		conn.close();

		return objEntidad;
	}

}
